/**
 * request 网络请求工具
 * 更详细的 api 文档: https://github.com/umijs/umi-request
 */

import axios from 'axios';
import storage from './storage';
import { isBrowser } from 'umi';
import { TOKEN } from '@/common/const';
import { message, Modal } from 'antd';
import { baseurl } from '../../config/server.config';
import { showLogin } from '@/hooks/login';
import { values } from 'lodash';

let nologinModal: any = null;

const codeMessage = {
  200: '服务器成功返回请求的数据。',
  201: '新建或修改数据成功。',
  202: '一个请求已经进入后台排队（异步任务）。',
  204: '删除数据成功。',
  400: '发出的请求有错误，服务器没有进行新建或修改数据的操作。',
  401: '用户没有权限（令牌、用户名、密码错误）。',
  403: '用户得到授权，但是访问是被禁止的。',
  404: '发出的请求针对的是不存在的记录，服务器没有进行操作。',
  406: '请求的格式不可得。',
  410: '请求的资源被永久删除，且不会再得到的。',
  422: '当创建一个对象时，发生一个验证错误。',
  500: '服务器发生错误，请检查服务器。',
  502: '网关错误。',
  503: '服务不可用，服务器暂时过载或维护。',
  504: '网关超时。',
};

const request = axios.create({
  timeout: 1000 * 60 * 60 * 24,
});

/**
 *
 * 判断是绝对路径
 */
const isAbsoluteUrl = (url) => {
  return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url);
};

// 修改第 46 行及以下代码：
if (isBrowser()) {
  localStorage.setItem(
    'dev-token',
    JSON.stringify({
      value:
        'bfb6zO+vceaVi13oQ8Y2gc/IP6HpeCUMJvsz7Ssbr6YCE1LlrPs5RZTrPO4/SceBb0BQKsDbPmqyEpNEOR0hg+zHObN0csV98im9dtQ18A',
    }),
  );
}

/*  value:
        'a8a2ZyDxb7VG8out9vna2QTlbSU+SY7hA/1MTMAGxUeDNcB8pj80G6lXyecf/2mPgwaL7M/gZauxI9UN8IOC9JWI/PCgZdN39peBaiqQbQ', */
// localStorage.setItem('dev-token', JSON.stringify({
//   value:
//     '001cTcaGC4zp48qBtmwxTtiLRohGmkWBsg7ECL7NdX4oscJyX7VLEX7BmDvy+UVN0Fmsdw3Y9wjPfwl+5IRN9t6GBkP4gJhwiGpcG4eiOQ',
// }))
// localStorage.setItem('dev-token', JSON.stringify({
//   value:
//     '94ec0H4qLH2zazzDTeklR5loskcWg5TJgYzjCxvtKp8NqGRaLbgINADkpPoSdGI9iR4LcXW94hjFVlJBJ+obgdCWO/dVrAplUQLjpk9R2g',
// }))
/* localStorage.setItem(
  'dev-token',
  JSON.stringify({
    value:
      'fa914dCcEqUYAwxXofJjZEC7bHIWN8LqKMvnQvUbMVbWo45dtr/qNYs1Pd4SRVAA/x+biz7ZoOwkVZ1Uvabd95kDTmILVprgtJG6vBQPxg',
  }),
); */

request.interceptors.request.use((config) => {
  const { url } = config;
  if (isBrowser()) {
    const token =
      // {
      //   value:
      //     '03f2qh5GSDBux22dVgTQQmlKxhWt1PD4Z4eGWYGteA0DuOh+hsPuY+IkJofCu2H/8jKul5ylLvkpgRcs4goCGDED+AqoAgezxaK3nRY4Lw',
      // } ||
      //|| {
      //   value:
      //     '5075ktrERsD9LI+PpNYxNid/NKU0CbYVYxLquhuYIoBTVGuhHQhL97hYpfDODZWtbTwKvZfcGcQkbyVgOBmuIo3lpUcqK97b5co',
      // } ||
      storage.get(TOKEN) || {};
    config.headers = { ...(config.headers || {}), token: token.value };
  }
  // 服务端
  else {
    config.url = isAbsoluteUrl(url) ? url : `${baseurl}${url}`;
  }
  return config;
});

request.interceptors.response.use(
  (response, options) => {
    /**
     *  未登录状态要判断下
     */
    if (response?.data?.code === 'to_login') {
      if (nologinModal) return;
      message.error(response?.data?.data || '请先登录');
      nologinModal = showLogin({
        title: '请先登录',
        okText: '立即登录',
        cancelText: '取消',
        onCancel: () => {
          nologinModal = false;
        },
      });
      return;
    }
    if (
      !response?.data?.success &&
      isBrowser() &&
      response?.config?.headers.skipErrorHandler != true
    ) {
      message.error(response?.data?.data || response?.data?.msg);
    }
    return response.data;
  },
  (data) => {
    const status = data.response.status;
    if (isBrowser()) {
      message.error(codeMessage[status]);
    }
  },
);

export default request;
